//
//  WBEmoticonTools.swift
//  Weibo
//
//  Created by xu on 2017/3/30.
//  Copyright © 2017年 xuantong. All rights reserved.
//

import UIKit
// 显示的列数 和 行数 和最大个数
let HMEMOTICONMAXCOL = 7
let HMEMOTICONMAXROW = 3
let HMEMOTICONMAXCOUNT = HMEMOTICONMAXCOL*HMEMOTICONMAXROW - 1



class WBEmoticonTools: NSObject {
    
    //写入沙盒
//    let file = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last! as NSString).appendingPathComponent("emoticons.archiver")
    
    
    // 路径
    fileprivate let file = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last! as NSString).appendingPathComponent("emoticon.archiver")
    

     // 全局访问点
    static let shared :WBEmoticonTools = WBEmoticonTools()
    
    // bundle文
    lazy var emoticonsBundle:Bundle = {
        
        let path = Bundle.main.path(forResource: "Emoticons.bundle", ofType: nil)!

        return Bundle(path:path)!
    
    }()
    
    // 最近
    lazy var recentEmoticons:[WBEmoticonModel] = {
        return self.getRecentModel()
    }()
    
    //默认
    lazy var normalEmoticons:[WBEmoticonModel] = {
        self.getEmoticonsWithPlist(path:"default")
    }()
    
     // emoji
    lazy var emojiEmoticons:[WBEmoticonModel] = {
     self.getEmoticonsWithPlist(path:"emoji")
        
    }()
    
    // lxh
    lazy var lxhEmoticons: [WBEmoticonModel] = {
         self.getEmoticonsWithPlist(path:"lxh")
    }()
    
    
    
    // 三维数组总数组
    lazy var allEmoticons:[[[WBEmoticonModel]]] = {
        return [
            [self.recentEmoticons],
            self.getEmoticonsGroup(emoticons: self.normalEmoticons),
            self.getEmoticonsGroup(emoticons: self.emojiEmoticons),
            self.getEmoticonsGroup(emoticons: self.lxhEmoticons)

        ]
    }()
    

    
    /// 通过一维数组截取完成后的到二维数组
    func getEmoticonsGroup(emoticons:[WBEmoticonModel])->[[WBEmoticonModel]]{
        
        // 计算出当前每种表情要显示的页数
        let pageCount = (emoticons.count+HMEMOTICONMAXCOUNT - 1)/HMEMOTICONMAXCOUNT
        
        // 定义一个可变的数组
        var tempArray :[[WBEmoticonModel]]=[[WBEmoticonModel]]()
        
         // 遍历页数
        for i in 0..<pageCount {
            let location = HMEMOTICONMAXCOUNT*i
            var length = HMEMOTICONMAXCOUNT
            
            // 防止数组越界
            if location+length>emoticons.count{
               length = emoticons.count - location
            }
             // 范围
            let range = NSRange(location:location,length:length)
              // 通过range 截取对应的元素到一个数组中
            
            let array = (emoticons as NSArray).subarray(with: range)as![WBEmoticonModel]
            // 保存一维数组
            tempArray.append(array)
        
        }
        
           return tempArray
        
    }
}



extension WBEmoticonTools {
    func saveRecentModel(model:WBEmoticonModel){
         // 遍历去重复
        for (i,emoticonModel) in recentEmoticons.enumerated() {
            if emoticonModel.isEmoji {
                if emoticonModel.code == model.code {
                    //删除
                    recentEmoticons.remove(at: i)
                    
                }
            }else{
                if emoticonModel.png == model.png {
                    recentEmoticons.remove(at: i)
                    
                }
            }
        }
        
        //添加到数组中(放在第一个位置)
        recentEmoticons.insert(model, at: 0)
        //如果大于20则删除最后一个
        if recentEmoticons.count>20 {
            recentEmoticons.removeLast()
        }
        
         allEmoticons[0][0] = recentEmoticons
        
        NSKeyedArchiver.archiveRootObject(recentEmoticons, toFile: file)
          
        
    }

    // 从本地获取表情模型数组
    fileprivate func getRecentModel() -> [WBEmoticonModel]{
        // 判断本地是否有保存的最近模型数组
        if let result =  NSKeyedUnarchiver.unarchiveObject(withFile: file) as? [WBEmoticonModel]{
 
            return result
    
        }
        
        return [WBEmoticonModel]()
    }
  
    
}

//MARK: 从一维数组中获取表情模型
extension WBEmoticonTools {
    
    func getEmoticonModelWithEmoticons(chs:String)->WBEmoticonModel?{
        //遍历默认表情
        
        for model in normalEmoticons {
            //判断图片描述是否相同
            if model.chs == chs {
                return model
            }
        }
        
        //遍历浪小花表情
        for model in lxhEmoticons {
            //判断图片描述是否相同\
            if model.chs == chs {
                return model
            }
        }
        // 如果本地没有查找到结果

        return nil
    }
    
}

//MARK: 通过不同的文件名读取对应的一维数组
extension WBEmoticonTools {
    
    fileprivate func getEmoticonsWithPlist(path:String)->[WBEmoticonModel] {
        // 路径
        let filePath = emoticonsBundle.path(forResource:  "\(path)/info.plist", ofType: nil)!
        // 得到对应的数组
        let pathArray = NSArray(contentsOfFile: filePath)!
         // 字典数组转模型数组
        let  tempArray = NSArray.yy_modelArray(with: WBEmoticonModel.self, json: pathArray)as![WBEmoticonModel]
         // 循环遍历
        for emoticonModel in tempArray {
            let png = emoticonModel.png ?? ""
            //赋值
            emoticonModel.allPath = path + "/" + png
        }
     
        return tempArray
        
    }
  
    
}
